package com.test1;

import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;

// 定义页面对象类
class Page {
    private String url;
    private Integer visitCount;
    private Date lastVisitTime;

    public Page(String url) {
        this.url = url;//页面网址
        this.visitCount = 0;//页面访问量
        this.lastVisitTime = new Date();//最后访问时间
    }

    public String getUrl() {
        return url;
    }

    public Integer getVisitCount() {
        return visitCount;
    }

    public void increaseVisitCount() {
        this.visitCount++;
        this.lastVisitTime = new Date();
    }

    public Date getLastVisitTime() {
        return lastVisitTime;
    }
}

public class Statistics {
    private ArrayList<Page> pages = new ArrayList<>();

    // 记录网页访问 记录访问量，更新访问时间
    public void recordAccess(String url) {
        Page page = findPage(url);
        //不存在则加入
        if (page == null) {
            page = new Page(url);
            pages.add(page);
        }
        page.increaseVisitCount();
    }

    // 查找指定url的页面对象，如果不存在则返回null
    private Page findPage(String url) {
        for (Page page : pages) {
            if (page.getUrl().equals(url)) {
                return page;
            }
        }
        return null;
    }

    // 显示访问量排行榜
//    public void topTrafficRankings() {
//        Collections.sort(pages, Comparator.comparing(Page::getVisitCount).reversed());
//        System.out.println("访问量排行榜：");
//        for (int i = 0; i < pages.size(); i++) {
//            Page page = pages.get(i);
//            System.out.println((i + 1) + ". " + page.getUrl() + "访问量: " + page.getVisitCount());
//        }
//    }
    public void displayVisitRanking() {
        pages.sort((p1, p2) -> p2.getVisitCount() - p1.getVisitCount());
        System.out.println("访问量排行榜：");
        int i = 1;
        for (Page page : pages) {
            System.out.println(i + "." + page.getUrl() + ": " + page.getVisitCount());
            i++;
        }
    }

    // 统计总访问量（所有页面的）
    public int totalVisits() {
        int total = 0;
        for (Page page : pages) {
            total += page.getVisitCount();
        }
        return total;
    }

    // 计算平均访问量（所有页面的）
    public double averageVisits() {
        if (pages.isEmpty()) {
            return 0;
        }
        return (double) totalVisits() / pages.size();
    }

    // 显示页面最后访问时间
    public void lastVisitTime(String url) {
        Page page = findPage(url);
        if (page!= null) {
            System.out.println("页面 " + url + " 的最后访问时间为: " + page.getLastVisitTime());
        } else {
            System.out.println("页面 " + url + " 不存在记录。");
        }
    }

    // 清空访问统计
    public void clearStatistics() {
        pages.clear();
    }

    public static void main(String[] args) {
        Statistics statistics = new Statistics();
        Scanner scanner = new Scanner(System.in);

        System.out.println("Java小工竭诚为您服务！");
        while (true) {
            System.out.println("请输入正确选项来选择您的操作：");
            System.out.println("1. 记录网页访问");
            System.out.println("2. 显示访问量排行榜");
            System.out.println("3. 统计总访问量");
            System.out.println("4. 计算平均访问量");
            System.out.println("5. 显示页面最后访问时间");
            System.out.println("6. 清空访问统计");
            System.out.println("7. 退出程序");

            int choice = scanner.nextInt();
            scanner.nextLine(); // 消耗换行符(类似getchar)

            switch (choice) {
                case 1:
                    System.out.println("请输入您想要访问的页面URL：");
                    String url = scanner.nextLine();
                    statistics.recordAccess(url);
                    break;
                case 2:
                    statistics.displayVisitRanking();
                    break;
                case 3:
                    System.out.println("总访问量: " + statistics.totalVisits());
                    break;
                case 4:
                    System.out.println("平均访问量: " + statistics.averageVisits());
                    break;
                case 5:
                    System.out.println("请输入要查询最后访问时间的页面URL：");
                    String queryUrl = scanner.nextLine();
                    statistics.lastVisitTime(queryUrl);
                    break;
                case 6:
                    statistics.clearStatistics();
                    System.out.println("访问统计已清空。");
                    break;
                case 7:
                    System.out.println("退出程序。");
                    scanner.close();
                    System.exit(0);
                default:
                    System.out.println("无效的选择，请重新输入。");
            }
        }
    }
}
